/**
    算法描述：由于我们目的是经过操作使其一致，
        因此可以从第一个非一致的内容改起。直至最终完全修改完毕。
    核心问题：意识到改第一个不一致问题时候，处理的其实是它的下一个按钮。
    解决所需数据结构+算法：数组+for循环遍历
**/
#include<iostream>
#include<cstring>
using namespace std;

char s1[5000010],s2[5000010],temp[5000010];
long long len,ans=1e18;

void change(long long i) {
    s1[i-1]=s1[i-1]=='1'?'0':'1';
    s1[i]=s1[i]=='1'?'0':'1';
    if(i+1<len)s1[i+1]=s1[i+1]=='1'?'0':'1';
}

int main() {
    long long one=0,two=1;
    cin >> s1 >> s2;
    strcpy(temp, s1);
    len=strlen(s1);
    for(long long i=1; i<len; i++) {
        //如果第i-1个不符合要求，则必须按下i
        if(s1[i-1]!=s2[i-1]) {
            one++;
            change(i);
        }
    }//贪心
    if(strcmp(s1, s2)==0)
        ans=one;
    strcpy(s1, temp);
    // 通过该方式无法执行第一步，因此需要手动更改并将答案+1
    s1[0] = s1[0] == '1'?'0':'1';
    s1[1] = s1[1] == '1'?'0':'1';
    for(long long i=1; i<len; i++) {
        if(s1[i-1]!=s2[i-1]) {
            two++;
            change(i);
        }
    }//再来一次
    if(strcmp(s1, s2)==0)
        ans=min(ans, two);
    if(ans == 1e18)
        cout << "impossible" << endl;
    else
        cout << ans << endl;
    return 0;
}